package com.shop.zkmall.app.im;

import com.shop.zkmall.app.domain.res.ProductInfo;

import java.util.List;
import java.util.Map;

/**
 * @author heike
 */
public interface TxTemplate {


    /**
     * 获取腾讯用户签名
     *
     * @return
     */
    String getUserSign();

    /**
     * 获取腾讯用户签名
     *
     * @return
     */
    String getUserSign(String userId);

    /**
     * 添加用户到腾讯云
     *
     * @param userId   腾讯云用户ID
     * @param userName 用户名名称
     * @param faceUrl  头像地址
     */
    Boolean accountImport(String userId, String userName, String faceUrl);

    /**
     * 修改用户资料
     *
     * @param userId   腾讯云用户ID
     * @param userName 用户名名称
     * @param faceUrl  头像地址
     * @return
     */
    Boolean updateUserInfo(String userId, String userName, String faceUrl);


    /**
     * 创建群组
     *
     * @param name         群组名称
     * @param userId       群主腾讯ID
     * @param notification 公告
     * @param meberList    群成员列表
     * @param image        群头像
     * @return string
     */
    String createGroup(String name, String userId, String notification, List<String> meberList, String image);

    /**
     * 修改群组信息
     *
     * @param groupId 群组ID
     * @param name 群组名称
     * @param faceUrl 群组头像
     * @param notification 群组公告
     * @param muteAllMember  设置全员禁言（选填）:"On"开启，"Off"关闭
     * @param applyJoinOption  申请加群方式（选填）包含 FreeAccess（自由加入），NeedPermission（需要验证），DisableApply（禁止加群）
     * @param inviteJoinOption 邀请加群处理方式(选填) ，包含 FreeAccess （直接邀请用户进群，不需要审批等操作）， NeedPermission 需要群管理员或者群主审批， DisableInvite 不支持 SDK 邀请邀请进群， 该选项 AVChatRoom 群类型不支持
     * @return boolean
     */
    Boolean updateGroup(String groupId, String name, String faceUrl, String notification,String muteAllMember,String applyJoinOption,String inviteJoinOption);

    /**
     * 创建直播群组
     * @param name 群组名称
     * @param owner 群组创建者
     * @param notification 群组公告
     * @param image 群组头像
     * @return
     */
    public String createLiveGroup(String name, String owner, String notification, String image);

    /**
     * 添加管理员
     * @param groupId 群组ID
     * @param adminId 管理员ID
     */
    void addAdminToLiveGroup(String groupId, String adminId);

    /**
     * 增加群组成员
     *
     * @param groupId   群组ID
     * @param meberList 成员列表
     * @return
     */
    Boolean insertUserGroup(String groupId, List<String> meberList);

    /**
     * 删除群成员
     *
     * @param groupId   群组ID
     * @param meberList 移除的成员腾讯ID
     * @return
     */
    Boolean removeUserGroup(String groupId, List<String> meberList);


    /**
     * 修改群组成员资料
     * @param param 修改的群成员资料
     * @return
     */
    Boolean updateUserGroup(Map<String, String> param);


    /**
     * 设置群组的管理员
     * @param groupId 群组ID
     * @param userId 腾讯的用户ID
     * @return
     */
    Boolean updateManagerGroup(String groupId, String userId);

    /**
     * 禁言/解除禁言群成员
     * @param groupId 群组ID
     * @param userIdList 禁言用户列表
     * @param time 禁言时长(秒)
     * @return
     */
    Boolean forbidUserGroup(String groupId,List<String> userIdList,Integer time);

    /**
     * 解除群组所有成员禁言
     * @param groupId 群组ID
     * @return
     */
    Boolean unForbidAllUser(String groupId);


    /**
     * 解散群组
     * @param groupId 群组ID
     * @return
     */
    Boolean destroyGroup(String groupId);

    /**
     * 添加好友
     * @param userId 用户ID
     * @param friendUserId 好友ID
     */
    void addFriend(String userId, String friendUserId);



    /**
     * 添加群组管理员
     * @param groupId 群组ID
     * @param userIdList 群组管理员列表
     * @return
     */
    Boolean addGroupAdmin(String groupId, List<String> userIdList);
    /**
     * 移除群组管理员
     * @param groupId 群组ID
     * @param userIdList 群组管理员列表
     * @return
     */
    Boolean removeGroupAdmin(String groupId, List<String> userIdList);

    /**
     * 加入直播群组
     * @param groupId 群组ID
     * @param userId 用户ID
     * @return
     */
    boolean joinLiveGroup(String groupId, String userId);

    /**
     * 直播群组推送商品
     * @param groupId 群组ID
     * @param product 商品信息
     * @return
     */
    boolean pushProductToLiveRoom(String groupId, ProductInfo product);


}
